#pragma once

//	// stl_hash_set
//	template <class Value, class HashFcn = hash<Value>,
//		class EqualKey = equal_to<Value>,
//		class Alloc = alloc>
//	class hash_set
//	{
//	private:
//		typedef hashtable<Value, Value, HashFcn, identity<Value>,
//			EqualKey, Alloc> ht;
//		ht rep;
//	public:
//		typedef typename ht::key_type key_type;
//		typedef typename ht::value_type value_type;
//		typedef typename ht::hasher hasher;
//		typedef typename ht::key_equal key_equal;
//		typedef typename ht::const_iterator iterator;
//		typedef typename ht::const_iterator const_iterator;
//		hasher hash_funct() const { return rep.hash_funct(); }
//		key_equal key_eq() const { return rep.key_eq(); }
//	};
//
//	// stl_hash_map
//	template <class Key, class T, class HashFcn = hash<Key>,
//		class EqualKey = equal_to<Key>,
//		class Alloc = alloc>
//	class hash_map
//	{
//	private:
//		typedef hashtable<pair<const Key, T>, Key, HashFcn,
//			select1st<pair<const Key, T> >, EqualKey, Alloc> ht;
//		ht rep;
//	public:
//		typedef typename ht::key_type key_type;
//		typedef T data_type;
//		typedef T mapped_type;
//		typedef typename ht::value_type value_type;
//		typedef typename ht::hasher hasher;
//		typedef typename ht::key_equal key_equal;
//		typedef typename ht::iterator iterator;
//		typedef typename ht::const_iterator const_iterator;
//	};
//
//	// stl_hashtable.h
//	template <class Value, class Key, class HashFcn,
//		class ExtractKey, class EqualKey,
//		class Alloc>
//	class hashtable {
//	public:
//		typedef Key key_type;
//		typedef Value value_type;
//		typedef HashFcn hasher;
//		typedef EqualKey key_equal;
//	private:
//		hasher hash;
//		key_equal equals;
//		ExtractKey get_key;
//		typedef __hashtable_node<Value> node;
//		vector<node*, Alloc> buckets;
//		size_type num_elements;
//	public:
//		typedef __hashtable_iterator<Value, Key, HashFcn, ExtractKey, EqualKey,
//			Alloc> iterator;
//		pair<iterator, bool> insert_unique(const value_type& obj);
//		const_iterator find(const key_type& key) const;
//	};
//
//	template <class Value>
//	struct __hashtable_node
//	{
//		__hashtable_node* next;
//		Value val;
//	};